package com.mydemo.common.pojo;

import java.util.HashMap;
import java.util.Map;

/**
 * 响应结果类
 *
 * @author Last_Island
 * @version 1.0
 */
public class RespResult extends HashMap<String, Object> {

    private static final long serialVersionUID = 1L;
    private static final String CODE_TAG = "code";
    private static final String MSG_TAG = "msg";
    private static final String DATA_TAG = "data";

    /**
     * 返回默认的成功响应结果
     * @return
     */
    public static RespResult defaultSuccess(){
        return setMsg(success(), "操作成功");
    }

    /**
     * 返回带有数据的默认消息成功响应结果
     * @param data
     * @return
     */
    public static RespResult defaultSuccess(Object data) {
        return setData(defaultSuccess(),data);
    }

    /**
     * 返回带有数据的成功响应结果
     * @param msg
     * @param data
     * @return
     */
    public static RespResult success(String msg, Object data) {
        return setData(success(msg), data);
    }

    /**
     * 返回带有消息的成功响应结果
     * @param msg
     * @return
     */
    public static RespResult success(String msg) {
        return setMsg(success(), msg);
    }

    /**
     * 返回成功响应结果
     * @return
     */
    private static RespResult success() {
        return setCode(new RespResult(), 200);
    }

    /**
     * 返回默认的失败响应结果
     * @return
     */
    public static RespResult defaultError(){
        return setMsg(error(405), "操作失败");
    }

    /**
     * 返回带有数据的默认失败响应结果
     * @return
     */
    public static RespResult defaultError(Object data){
        return setData(defaultError(), data);
    }

    /**
     * 返回带有数据的失败响应结果
     * @param msg
     * @param data
     * @return
     */
    public static RespResult error(int code,String msg, Object data){
        return setData(error(code,msg), data);
    }

    /**
     * 返回带有消息的失败响应结果
     * @param msg
     * @return
     */
    public static RespResult error(int code,String msg){
        return setMsg(error(code), msg);
    }

    /**
     * 返回失败响应结果
     * @return
     */
    private static RespResult error(int code){
        return setCode(new RespResult(), code);
    }

    /**
     * 自定义有数据的响应结果
     * @param code
     * @param msg
     * @param data
     * @return
     */
    public static RespResult custom(int code, String msg, Object data){
        return setData(custom(code,msg), data);
    }

    /**
     * 自定义无数据的响应结果
     * @param code
     * @param msg
     * @return
     */
    public static RespResult custom(int code, String msg){
        return setMsg(setCode(new RespResult(), code), msg);
    }

    /**
     * 设置状态码
     * @param respResult
     * @param code
     * @return
     */
    private static RespResult setCode(RespResult respResult, int code) {
        respResult.put(CODE_TAG, code);
        return respResult;
    }

    /**
     * 设置消息
     * @param respResult
     * @param msg
     * @return
     */
    private static RespResult setMsg(RespResult respResult, String msg) {
        respResult.put(MSG_TAG, msg);
        return respResult;
    }

    /**
     * 设置数据
     * @param respResult
     * @param Date
     * @return
     */
    private static RespResult setData(RespResult respResult, Object Date) {
        respResult.put(DATA_TAG, Date);
        return respResult;
    }
}
